package com.pacifico.telebusca.web.listener;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;

import com.pacifico.telebusca.exception.Errores;
import com.pacifico.telebusca.web.facade.TeleBuscaFacade;

public class AutenticacionListenerFailure implements
		AuthenticationFailureHandler {
	@Autowired
	private TeleBuscaFacade teleBuscaFacade;
	private String nombreUsuario;
	private UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken;

	private Logger logger = Logger
			.getLogger(AutenticacionListenerFailure.class);

	public void onAuthenticationFailure(HttpServletRequest arg0,
			HttpServletResponse arg1, AuthenticationException arg2)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		String mensaje = arg2.getMessage();
		String retorna = "";
		usernamePasswordAuthenticationToken = (UsernamePasswordAuthenticationToken) arg2
				.getAuthentication();
		if (usernamePasswordAuthenticationToken != null) {
			this.nombreUsuario = (String) usernamePasswordAuthenticationToken
					.getPrincipal();
			teleBuscaFacade.registrarAuditoriaByNombreUsuario("T0022", "T0024",
					nombreUsuario);
		}

		if (mensaje.contains("User not found")) {
			retorna = Errores.MAP.get("E1525");
		}
		if (mensaje.contains("invalid credentials")) {
			retorna = Errores.MAP.get("E152e");
		}
		if (mensaje.contains("Bad credentials")) {
			retorna = Errores.MAP.get("E152e");
		}

		if (mensaje.contains("User credentials have expired")) {
			retorna = Errores.MAP.get("E1776");
		}
		if (mensaje.contains("User is disabled")) {
			retorna = Errores.MAP.get("E1533");
		}
		if (mensaje.contains("User account has expired")) {
			retorna = Errores.MAP.get("E1701");
		}
		if (mensaje.contains("User account is locked")) {
			retorna = Errores.MAP.get("E1775");
		}
		if (mensaje.contains("User was not found in directory")) {
			retorna = Errores.MAP.get("E1525");
		}
		if (mensaje.contains("Supplied password was invalid")) {
			retorna = Errores.MAP.get("E152e");
		}
		if (mensaje.contains("Password has expired")) {
			retorna = Errores.MAP.get("E1532");
		}
		if (mensaje.contains("Account is disabled")) {
			retorna = "Cuenta Deshabilitada";
		}
		if (mensaje.contains("Account expired")) {
			retorna = Errores.MAP.get("E1533");
		}
		if (mensaje.contains("User must reset password")) {
			retorna = Errores.MAP.get("E1773");
		}
		if (mensaje.contains("Account locked")) {
			retorna = Errores.MAP.get("E1775");
		}

		teleBuscaFacade.registrarAuditoriaByMensaje("T0022", retorna,
				nombreUsuario);

		logger.info("retorna " + retorna);

		arg1.sendRedirect(arg0.getContextPath() + "/acceso?error=1&mensaje="
				+ retorna);

	}

}
